import {
  ArgumentsHost,
  Catch,
  ExceptionFilter,
  HttpException,
} from '@nestjs/common';

/**
 * 异常过滤器 异常返回统⼀响应
 * 捕获作为HttpException类实例的异常，并为它们设置⾃定义响应逻辑
 */

@Catch(HttpException)
export class AbnormalFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    // 获取请求上下文
    const ctx = host.switchToHttp();
    // 获取请求上下文中的response对象
    const response = ctx.getResponse();
    // 获取异常状态码
    const status = exception.getStatus();
    // 异常消息
    const message = exception.message ? exception.message : 'service error';
    // Response.json()⽅法，使⽤ Response对象直接控制发送的响应。
    response.status(status).json({
      code: 404,
      data: null,
      msg: message,
    });
  }
}
